package com.yami.shop.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import com.yami.shop.bean.dto.RedPackerIsUnpack;
import com.yami.shop.bean.dto.red.RedPacketInfoDto;
import com.yami.shop.bean.model.RedPacketInfo;
import com.yami.shop.bean.model.RedPacketRecord;
import com.yami.shop.bean.vo.RedPacketInfoVo;
import com.yami.shop.bean.vo.RedPacketVo;
import com.yami.shop.common.response.ServerResponseEntity;
import com.yami.shop.common.util.PageParam;
import org.apache.ibatis.annotations.Param;

public interface RedPacketInfoService extends IService<RedPacketInfo> {

    /**
     * 红包记录
     *
     * @param redPacketId
     * @param channelUserId
     * @return
     */
    RedPacketVo records(Long redPacketId, String channelUserId);

    /**
     * 发红包
     *
     * @param redPacketInfoDto
     */
    RedPacketVo sendRedPacket(RedPacketInfoDto redPacketInfoDto);

    /**
     * 获取用户最新的发红包记录信息
     * @param userId 用户id
     * @return 等级记录信息
     */
    RedPacketInfo getMaxCrtTimeByUserId(String userId);


    /**
     * 抢红包，获取抢红包资格
     *
     * @param redPacketId
     * @param userId
     * @return
     */
    ServerResponseEntity<RedPackerIsUnpack> rodRedPacket(Long redPacketId, String userId);

    /**
     * 抢红包，获取抢红包资格
     *
     * @param redPacketId
     * @param userId
     * @return
     */
    ServerResponseEntity<Boolean> rodOneRedPacket(Long redPacketId, String userId);

    /**
     * 拆红包
     *
     * @param redPacketId
     * @param userId
     * @param type
     */
    Double unpackRedPacket(Long redPacketId, String userId, String type);



    /**
     * 收到的红包
     *
     * @param page
     * @param userId
     * @param year
     * @return
     */
    IPage<RedPacketInfoVo> getRedPackets(PageParam<RedPacketInfoVo> page, @Param("userId") String userId, @Param("type") String type, @Param("year") String year);

    /**
     * 我发出的红包
     *
     * @param page
     * @param userId
     * @param type
     * @param year
     * @return
     */
    IPage<RedPacketInfoVo>sendRedPackets(PageParam<RedPacketInfoVo> page, @Param("userId") String userId, @Param("type") String type, @Param("year") String year);


    /**
     * 根据用户id 和 红包id 查询金额
     *
     * @param redPacketId
     * @param userId
     * @return
     */
    RedPacketRecord getRedAmount(Long redPacketId, String userId);


    /**
     * 发出红包列表
     * @param userId
     * @param type
     * @param year
     * @return
     */
    IPage<RedPacketInfoVo> sendRedListByyears(String userId, String type, String year);

    /**
     * 功能描述: 保存红包领取记录
     * @Author: LSR
     * @Date: 2023/2/22 14:36
     */
    void saveRedPacketRecord(Long redPacketId, String userId, String type, Integer redPacketAmount, String xsUserId);

    RedPacketVo sendGasRedPacket(RedPacketInfoDto red);
}
